import * as React from "react" import { Metadata } from "next" import Link from "next/link" import { notFound } from "next/navigation" import { ArrowLeft } from "lucide-react" import { Shell } from "@/components/shell" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Separator } from "@/components/ui/separator" import { getPQById, getPQDataByVendorId } from "@/lib/pq/service" import { unstable_noStore as noStore } from 'next/cache' import { PQReviewWrapper } from "@/components/pq-input/pq-review-wrapper" import { formatDate } from "@/lib/utils" export const metadata: Metadata = { title: "PQ 검토", description: "협력업체의 Pre-Qualification 답변을 검토합니다.", } // 페이지가 기본적으로 동적임을 나타냄 export const dynamic = "force-dynamic" interface PQReviewPageProps { params: Promise<{ vendorId: string; submissionId: string; }> } export default async function PQReviewPage(props: PQReviewPageProps) { // 캐시 비활성화 noStore() const params = await props.params const vendorId = parseInt(params.vendorId, 10) const submissionId = parseInt(params.submissionId, 10) try { // PQ Submission 정보 조회 const pqSubmission = await getPQById(submissionId, vendorId) // PQ 데이터 조회 (질문과 답변) const pqData = await getPQDataByVendorId(vendorId, pqSubmission.projectId || undefined) // 프로젝트 정보 (프로젝트 PQ인 경우) const projectInfo = pqSubmission.projectId ? { id: pqSubmission.projectId, projectCode: pqSubmission.projectCode || '', projectName: pqSubmission.projectName || '', status: pqSubmission.status, submittedAt: pqSubmission.submittedAt, } : null // PQ 유형 및 상태 레이블 const typeLabel = pqSubmission.type === "GENERAL" ? "일반 PQ" : pqSubmission.type === "PROJECT" ? "프로젝트 PQ" : pqSubmission.type === "NON_INSPECTION" ? "미실사 PQ" : "일반 PQ" const statusLabel = getStatusLabel(pqSubmission.status) const statusVariant = getStatusVariant(pqSubmission.status) // 수정 가능 여부 (SUBMITTED 상태일 때만 가능) const canReview = pqSubmission.status === "SUBMITTED" return (

{pqSubmission.vendorName} - {typeLabel}

{statusLabel} {projectInfo && ( {projectInfo.projectName} ({projectInfo.projectCode}) )}
{/* 상태별 알림 */} {pqSubmission.status === "SUBMITTED" && ( 제출 완료 협력업체가 {formatDate(pqSubmission.submittedAt, "kr")}에 PQ를 제출했습니다. 검토 후 승인 또는 거부할 수 있습니다. )} {pqSubmission.status === "APPROVED" && ( 승인됨 {formatDate(pqSubmission.approvedAt, "kr")}에 승인되었습니다. )} {pqSubmission.status === "REJECTED" && ( 거부됨 {formatDate(pqSubmission.rejectedAt, "kr")}에 거부되었습니다. {pqSubmission.rejectReason && (
사유: {pqSubmission.rejectReason}
)}
)} {/* PQ 검토 컴포넌트 */} PQ 검토 협력업체 정보

협력업체 정보

업체명

{pqSubmission.vendorName}

업체 코드

{pqSubmission.vendorCode}

상태

{pqSubmission.vendorStatus}

{/* 필요시 추가 정보 표시 */}
) } catch (error) { console.error("Error loading PQ:", error) notFound() } } // 상태 레이블 함수 function getStatusLabel(status: string): string { switch (status) { case "REQUESTED": return "요청됨"; case "IN_PROGRESS": return "진행 중"; case "SUBMITTED": return "제출됨"; case "APPROVED": return "승인됨"; case "REJECTED": return "거부됨"; default: return status; } } // 상태별 Badge 스타일 function getStatusVariant(status: string): "default" | "outline" | "secondary" | "destructive" | "success" { switch (status) { case "REQUESTED": return "outline"; case "IN_PROGRESS": return "secondary"; case "SUBMITTED": return "default"; case "APPROVED": return "success"; case "REJECTED": return "destructive"; default: return "outline"; } }